package com.xzzz.expand.gateway.application.config;

import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;


/**
 * 网关配置
 */
@Slf4j
@Configuration
@AllArgsConstructor
public class GatewayConfig {

    // ============================================================================================ //
    //                                           跨域配置                                            //
    // ============================================================================================ //
    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.setMaxAge(3600L);
        // 支持安全证书
        config.setAllowCredentials(true);
        // 允许任何来源
        config.addAllowedOriginPattern("*");
        // 允许任何请求方式
        config.addAllowedMethod("*");
        // 允许任何请允许任何来源求头
        config.addAllowedHeader("*");
//        config.setExposedHeaders(
//            new ArrayList<String>(){{
//                this.add("access-control-allow-headers");
//                this.add("access-control-allow-methods");
//                this.add("access-control-allow-origin");
//                this.add("access-control-max-age");
//                this.add("X-Frame-Options");
//            }}
//        );

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}
